#include <stdio.h>
#include <stdlib.h>

int Compare(const void *a, const void *b)
{
    if (((int *)a)[4] != ((int *)b)[4])
        return ((int *)a)[4] < ((int *)b)[4];
    if (((int *)a)[1] != ((int *)b)[1])
        return ((int *)a)[1] < ((int *)b)[1];
    return ((int *)a)[0] > ((int *)b)[0];
}

int arr[300][5] = {0};
int main()
{
    int m = 0;
    scanf("%d", &m);
    for (int i = 0; i < m; ++i)
    {
        arr[i][0] = i + 1;
        scanf("%d %d %d", &(arr[i][1]), &(arr[i][2]), &(arr[i][3]));
        arr[i][4] = arr[i][1] + arr[i][2] + arr[i][3];
    }
    qsort((int *)arr, m, sizeof(int) * 5, Compare);
    for (int i = 0; i < (m > 5 ? 5 : m); ++i)
    {
        printf("%d %d\n", arr[i][0], arr[i][4]);
    }
    for (int i = 0; i < 5 - m; ++i)
    {
        printf("0 0\n");
    }
    return 0;
}

// int main()
// {
//     int T = 0;
//     int n = 0;
//     long long f[60];
//     f[1] = 1;
//     f[2] = 2;
//     f[3] = 4;
//     for (int i = 4; i < 51; i++)
//         f[i] = f[i - 1] + f[i - 2] + f[i - 3];
//     scanf("%d", &T);
//     while (T--)
//     {
//         scanf("%d", &n);
//         printf("%d\n", f[n]);
//     }
//     return 0;
// }
// long long func(int n)
// {
//     long long tmp[4] = {0};
//     tmp[1] = 1;
//     tmp[2] = 2;
//     tmp[3] = 4;
//     if (n <= 3)
//         return tmp[n];
//     for (int i = 0; i < n - 3; ++i)
//     {
//         long long x = tmp[1];
//         tmp[1] = tmp[2];
//         tmp[2] = tmp[3];
//         tmp[3] = x + tmp[1] + tmp[2];
//     }
//     return tmp[3];
// }

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);
//     for (int i = 0; i < n; ++i)
//     {
//         int tmp = 0;
//         scanf("%d", &tmp);
//         printf("%lld\n", func(tmp));
//     }
//     return 0;
// }

// int buckets[101] = {0};
// int *questions[101] = {0};

// int main()
// {
//     int m = 0;
//     int n = 0;
//     while (scanf("%d %d", &n, &m) != EOF)
//     {
//         for (int i = 1; i <= m; ++i)
//             scanf("%d", buckets + i);
//         for (int i = 1; i <= n; ++i)
//         {
//             int tmp = 0;
//             scanf("%d", &tmp);
//             questions[i] = buckets + tmp;
//         }
//         int q = 0;
//         scanf("%d", &q);
//         int op = 0;
//         for (int i = 0; i < q; ++i)
//         {
//             scanf("%d", &op);
//             if (op == 2)
//             {
//                 int id = 0;
//                 scanf("%d", &id);
//                 printf("%d\n", *(questions[id]));
//             }
//             else if (op == 1)
//             {
//                 int x = 0;
//                 scanf("%d", &x);
//                 scanf("%d", buckets + x);
//             }
//         }
//     }

//     return 0;
// }

// int ai[21] = {0};
// int place[21][2] = {0};
// int main()
// {
//     int n = 0;
//     int m = 0;
//     scanf("%d %d", &n, &m);
//     for (int i = 1; i <= n; ++i)
//         scanf("%d", ai + i);
//     for (int i = 1; i <= m; ++i)
//         scanf("%d %d", &place[i][0], &place[i][1]);
//     int t = 0;
//     scanf("%d", &t);
//     for (int i = 0; i < t; ++i)
//     {
//         int op = 0;
//         scanf("%d", &op);
//         if (op == 1)
//         {
//             // 计算密钥
//             int x = 0;
//             scanf("%d", &x);
//             x = place[x][0];
//             printf("%d\n", ai[place[x][1]]);
//         }
//         else if (op == 2)
//         {
//             // 更换数据
//             int x = 0;
//             scanf("%d", &x);
//             scanf("%d %d", &place[x][0], &place[x][1]);
//         }
//     }
//     return 0;
// }

// M 青蛙过河
// int func(int h, int k)
// {
//     int f[20000] = {0};
//     f[0] = k + 1;
//     int t = f[0] + k + 1;
//     for (int i = 1; i <= h; i++)
//     {
//         f[i] = t;
//         t += f[i];
//     }
//     return f[h];
// }

// int main()
// {
//     int total = 0;
//     scanf("%d", &total);
//     int h = 0;
//     int k = 0;
//     for (int i = 0; i < total; ++i)
//     {
//         scanf("%d %d", &h, &k);
//         printf("%d\n", func(h, k));
//     }
//     return 0;
// }

// int Compare(const void *a, const void *b)
// {
//     return *(int *)a < *(int *)b;
// }
// int arr[120] = {0};

// int main()
// {
//     int m = 0;
//     while (scanf("%d", &m) != EOF)
//     {
//         int sum = 0;
//         int max = 0;
//         for (int i = 0; i < m; ++i)
//         {
//             scanf("%d", arr + i);
//             sum += arr[i];
//             max = arr[i] > max ? arr[i] : max;
//         }
//         qsort(arr, m, sizeof(int), Compare);
//         printf("%d %d ", sum, max);
//         for (int i = 0; i < m; ++i)
//             printf("%d ", arr[i]);
//         printf("\n");
//     }
//     return 0;
// }

// const char *names[] = {"xinxi", "li", "jikong", "fuzhuang", "jizhu", "jingguan", "other"};
// int main()
// {
//     int m = 0;
//     while (scanf("%d", &m) != EOF)
//     {
//         int tmp = 0;
//         for (int i = 0; i < m; ++i)
//         {
//             scanf("%d", &tmp);
//             printf("%s\n", names[tmp % 7]);
//         }
//     }
//     return 0;
// }

// void Swap(int *a, int *b)
// {
//     int tmp = *a;
//     *a = *b;
//     *b = tmp;
// }
// void Reverse(int *left, int *right)
// {
//     while (left < right)
//     {
//         Swap(left++, right--);
//     }
// }
// int arr[100] = {0};
// int main()
// {

//     int left = 0;
//     int right = 0;
//     while (scanf("%d %d", &left, &right) != EOF)
//     {
//         for (int i = 0; i < left; ++i)
//             scanf("%d", arr + i);
//         right %= left;
//         Reverse(arr, arr + left - right - 1);
//         Reverse(arr + left - right, arr + left - 1);
//         Reverse(arr, arr + left - 1);
//         for (int i = 0; i < left; ++i)
//             printf("%d ", arr[i]);
//         printf("\n");
//     }
//     return 0;
// }

// int main()
// {
//     int left = 0;
//     int right = 0;
//     while (scanf("%d %d", &left, &right) != EOF)
//     {
//         if (left < right)
//             Swap(&left, &right);
//         printf("%d %d\n", left, right);
//     }
//     return 0;
// }

// int IsPrime(int n)
// {
//     if (n < 2)
//         return 0;
//     for (int i = 2; i * i <= n; ++i)
//     {
//         if (n % i == 0)
//             return 0;
//     }
//     return 1;
// }

// int main()
// {
//     int left = 0;
//     int right = 0;
//     while (scanf("%d %d", &left, &right) != EOF)
//     {
//         for (int i = left; i <= right; ++i)
//         {
//             if (IsPrime(i))
//             {
//                 printf("%d ", i);
//             }
//         }
//         printf("\n");
//     }
//     return 0;
// }

// int main()
// {
//     int left = 0;
//     int right = 0;
//     while (scanf("%d %d", &left, &right) != EOF)
//     {
//         if (left == right && left == 0)
//             break;
//         int flag = 0;
//         for (int i = left; i <= right; ++i)
//         {
//             if (!IsPrime(i * i + i + 41))
//             {
//                 printf("Sorry\n");
//                 flag = 1;
//                 break;
//             }
//         }
//         if (!flag)
//             printf("OK\n");
//     }
//     return 0;
// }
